package com.obaamilos.accesscontrol;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 * @author Pedro R. Oliveira
 *
 */

public class TestaAgenteACGUI extends JFrame {
	/**
	 * Gerado pelo Eclipse
	 */
	//private static final long serialVersionUID = 5423076851933375436L;
	private static final long serialVersionUID = -3577614322021712093L;

	private TestaAgenteAC meuAgente;
	
	private JTextField qtdAgentesAC;
	private JRadioButton btLogin, btAcesso, btLogout;
	private JTextArea txtComando, txtResposta;//, txtTokens;
	private JComboBox<String> cbTokens;
	//private JComboBox cbTokens;
	
	TestaAgenteACGUI(TestaAgenteAC a) {
		//super(a.getLocalName());
		
		meuAgente = a;

		//frame = new JFrame();
		setResizable(false);
		//setType(Type.UTILITY);
		setBounds(100, 100, 550, 400);
		//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		getContentPane().setLayout(null);
		
		JLabel lblNewLabel = new JLabel("Agentes AC:");
		lblNewLabel.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel.setBounds(0, 14, 97, 14);
		getContentPane().add(lblNewLabel);
		
		qtdAgentesAC = new JTextField();
		qtdAgentesAC.setBounds(107, 11, 62, 20);
		getContentPane().add(qtdAgentesAC);
		qtdAgentesAC.setColumns(10);
		
		JLabel lblOperacao = new JLabel("Operação:");
		lblOperacao.setHorizontalAlignment(SwingConstants.RIGHT);
		lblOperacao.setBounds(35, 48, 62, 14);
		getContentPane().add(lblOperacao);
		
		JPanel panel = new JPanel();
		panel.setBounds(107, 37, 240, 36);
		getContentPane().add(panel);
		panel.setLayout(null);
		
		btLogin = new JRadioButton("Login", true);
		btLogin.setBounds(6, 7, 62, 23);
		panel.add(btLogin);
		
		btAcesso = new JRadioButton("Acesso", false);
		btAcesso.setBounds(80, 7, 70, 22);
		panel.add(btAcesso);
		
		btLogout = new JRadioButton("Logout", false);
		btLogout.setBounds(156, 7, 109, 23);
		panel.add(btLogout);
		ButtonGroup bgrupo = new ButtonGroup();
		bgrupo.add(btLogin);
		bgrupo.add(btAcesso);
		bgrupo.add(btLogout);

		btLogin.addActionListener( new ActionListener() {
			public void actionPerformed(ActionEvent ev) {
				txtComando.setText("login<aa>login_usuario<aa>senha_usuario");
			}
		} );
		btAcesso.addActionListener( new ActionListener() {
			public void actionPerformed(ActionEvent ev) {
				if (cbTokens.getItemCount() > 0) {
					txtComando.setText("acesso<aa>"+cbTokens.getSelectedItem()+"<aa>Nome_Recurso<aa>Acesso_Desejado");
				}
				else {
					txtComando.setText("acesso<aa>TOKEN<aa>Nome_Recurso<aa>Acesso_Desejado");
				}
			}
		} );
		btLogout.addActionListener( new ActionListener() {
			public void actionPerformed(ActionEvent ev) {
				if (cbTokens.getItemCount() > 0) {
					txtComando.setText("logout<aa>"+cbTokens.getSelectedItem());
				}
				else {
					txtComando.setText("logout<aa>TOKEN");
				}
			}
		} );
		
		JLabel lblMensagem = new JLabel("Mensagem:");
		lblMensagem.setHorizontalAlignment(SwingConstants.RIGHT);
		lblMensagem.setBounds(19, 86, 78, 14);
		getContentPane().add(lblMensagem);
		
		txtComando = new JTextArea();
		txtComando.setWrapStyleWord(true);
		txtComando.setLineWrap(true);
		txtComando.setBounds(107, 81, 425, 63);
		getContentPane().add(txtComando);
		
		cbTokens = new JComboBox<String>();
		cbTokens.setBounds(107, 155, 297, 20);
		getContentPane().add(cbTokens);
		cbTokens.addActionListener( new ActionListener() {
			public void actionPerformed(ActionEvent ev) {
				txtComando.setText("");
			}
		} );
		
		JLabel lblToken = new JLabel("Token:");
		lblToken.setHorizontalAlignment(SwingConstants.RIGHT);
		lblToken.setBounds(0, 158, 97, 14);
		getContentPane().add(lblToken);
		
		txtResposta = new JTextArea();
		txtResposta.setBounds(107, 186, 425, 170);
		getContentPane().add(txtResposta);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(107, 187, 425, 177);
		getContentPane().add(scrollPane);
		scrollPane.setViewportView(txtResposta);
		
		JLabel lblResposta = new JLabel("Resposta:");
		lblResposta.setHorizontalAlignment(SwingConstants.RIGHT);
		lblResposta.setBounds(19, 186, 78, 14);
		getContentPane().add(lblResposta);
		
		JButton btnEnviar = new JButton("Enviar");
		btnEnviar.setBounds(454, 8, 78, 26);
		getContentPane().add(btnEnviar);
		btnEnviar.addActionListener( new ActionListener() {
			public void actionPerformed(ActionEvent ev) {
				try {
					if (btLogin.isSelected()) {
						meuAgente.setTipoTeste(0);
					}
					else if (btAcesso.isSelected()) {
						meuAgente.setTipoTeste(1);
					}
					else if (btLogout.isSelected()) {
						meuAgente.setTipoTeste(2);
					}
					
					String m_comando = txtComando.getText().trim();
					
					txtResposta.setText("");
					
					meuAgente.EnviaMensagem(m_comando);
				}
				catch (Exception e) {
					JOptionPane.showMessageDialog(TestaAgenteACGUI.this, "Valor inv�lido. "+e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); 
				}
			}
		} );
		
		JButton btListar = new JButton("Listar");
		btListar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					String m_comando = "listar<aa>tkppaapp";
					
					meuAgente.setTipoTeste(1);
					txtResposta.setText("");
					
					meuAgente.EnviaMensagem(m_comando);
				}
				catch (Exception e) {
					JOptionPane.showMessageDialog(TestaAgenteACGUI.this, "Valor inv�lido. "+e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); 
				}
			}
		});
		btListar.setBounds(454, 42, 78, 26);
		getContentPane().add(btListar);
		
		
		btLogin.doClick();
		
		// Encerra Teste quando usu�rio fecha o Frame	
		addWindowListener(new	WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				meuAgente.doDelete();
			}
		} );
		 
		setResizable(true);
	}
	
	public void setTxtTokens(String pToken) {
		cbTokens.addItem(pToken);
		//txtTokens.setText(txtTokens.getText()+System.getProperty("line.separator")+pToken);
	}
	
	public void setQtdAgentesAC(int p_qtd) {
		qtdAgentesAC.setText( "" + p_qtd);
	}

	//public void setQtdAgentesUpd(int p_qtd) {
	//	qtdAgentesUpd.setText( "" + p_qtd);
	//}

	public void setTxtResposta(String p_resposta) {
		txtResposta.setText(p_resposta);
	}

	public void showGui() {
		//pack();
		setSize(550, 400);
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		int centerX = (int)screenSize.getWidth() / 2;
		int centerY = (int)screenSize.getHeight() / 2;
		setLocation(centerX - 550 / 2, centerY - 400 / 2);
		super.setVisible(true);
	}	
}
